package com.wangp.mywrite.coding;

/***
 * @author wangpeng
 * @since 2022-02-21  14:55
 */
public class Dominoes {

    public String pushDominoes(String dominoes) {
//        char[] s = dominoes.toCharArray();
//        int n = s.length, i = 0;
//        char left = 'L';
//        while (i < n) {
//            int j = i;
//            // 找到一段连续的没有被推动的骨牌
//            while (j < n && s[j] == '.') {
//                j++;
//            }
//            char right = j < n ? s[j] : 'R';
//            // 方向相同，那么这些竖立骨牌也会倒向同一方向
//            if (left == right) {
//                while (i < j) {
//                    s[i++] = right;
//                }
//                // 方向相对，那么就从两侧向中间倒
//            } else if (left == 'R' && right == 'L') {
//                int k = j - 1;
//                while (i < k) {
//                    s[i++] = 'R';
//                    s[k--] = 'L';
//                }
//            }
//            left = right;
//            i = j + 1;
//        }
//        return new String(s);

        char[] res = dominoes.toCharArray();
        char left = 'L';
        int i = 0;
        int n = dominoes.length();

        while (i < n) {
            int j = i;
            while (j < n && res[j] == '.') {
                j++;
            }
            char right = j < n ? res[j] : 'R';
            if (left == right) {
                while (i < j) {
                    res[i++] = right;
                }
            } else if (left == 'R' && right == 'L') {
                int k = j - 1;
                while (i < k) {
                    res[i++] = 'R';
                    res[k--] = 'L';
                }
            }
            left = right;
            i = j + 1;
        }
        return new String(res);
    }

    public String pushDominoes2(String dominoes) {
        String tmp = "";
        while (!dominoes.equals(tmp)) {
            tmp = dominoes;
            dominoes = dominoes.replace("R.L", "T").replace("R.", "RR").replace(".L", "LL").replace("T", "R.L");
        }
        return dominoes;
    }

    public static void main(String[] args) {
        Dominoes dominoes = new Dominoes();
        String pushDominoes = dominoes.pushDominoes2("L...R");
        System.out.println(pushDominoes);
    }
}
